package com.bt.lms.service;

import com.bt.lms.entity.ClassInfo;
import com.bt.lms.entity.StuBasicInfo;
import com.bt.lms.entity.page.Page;

import java.util.List;

/**
 * 班级信息模块
 *
 * @author 李鹏
 */
public interface ClassInfoService {


    /**
     * 随机平均分班功能
     *
     * @param classInfos       多个班级信息（没有学员）
     * @param enrollmentPlanId 招生计划ID
     * @return 随机分班后的班级信息（有学员）
     */
    public List<ClassInfo> randomAverageDivide(List<ClassInfo> classInfos, Long enrollmentPlanId) throws Exception;

    /**
     * 手动分班功能
     *
     * @param classInfos       多个班级信息（没有学员）
     * @param enrollmentPlanId 招生计划ID
     * @return 手动分班后的班级信息（有学员）
     */
    public List<ClassInfo> handDivide(List<ClassInfo> classInfos, Long enrollmentPlanId) throws Exception;

    /**
     * 增加班级学员功能（一个班级里增加多个学员）
     *
     * @param classInfo         一个班级信息
     * @param studentBasicInfos 多个学员的信息
     * @return 增加的结果（true/false）
     */
    public boolean add(ClassInfo classInfo, List<StuBasicInfo> studentBasicInfos);

    /**
     * 删除班级学员功能（一个班级里删除多个学员）
     *
     * @param classInfo         一个班级信息
     * @param studentBasicInfos 多个学员的信息
     * @return 删除的结果（true/false）
     */
    public boolean delete(ClassInfo classInfo, List<StuBasicInfo> studentBasicInfos);

    /**
     * 预览分班结果功能
     *
     * @param classInfos 班级信息
     * @return 班级信息
     */
    public List<ClassInfo> previewDivideResult(List<ClassInfo> classInfos, Long enrollmentPlanId) throws Exception;

    /**
     * 调整分班功能
     *
     * @param studentBasicInfo 学员基本信息
     * @param classInfo        要调整到的班级信息
     * @return 调整结果(true / false)
     */
    public boolean adjust(StuBasicInfo studentBasicInfo,ClassInfo classInfo);

    /**
     * 分页查询班级学员功能
     *
     * @param page 分页条件模型
     *                  每一页条数:
     *                  页码:
     *                  数据：（班级信息）
     * @return 分页模型
     * 每页多少条数据
     * 总条数：
     * 页码：
     * 数据：（班级学员信息）
     */
    public Page<StuBasicInfo> pagingConditionQuery(Page<ClassInfo> page);

    /**
     * 查看学员名单功能
     *
     * @param id 班级Id
     * @return 学员信息
     */
    public StuBasicInfo checkStu(Long id) throws Exception;


}
